var mongodb = require('./db'),
    ObjectID = require('mongodb').ObjectID;

function Post(name, title, post) {
    this.name = name;
    this.title = title;
    this.post = post;
}

module.exports = Post;

//存储一篇文章以及其相关信息
Post.prototype.save = function (callback) {
    var date = new Date();
    //存储各种时间格式，方便调试
    var time = {
        date: date,
        year: date.getFullYear(),
        month: date.getFullYear()+"-"+(date.getMonth()+1),
        day: date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate(),
        minute: date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate()+" "+date.getHours()+":"+(date.getMinutes()<10?'0'+date.getMinutes():date.getMinutes())
    };

    //要存入数据库的文档
    var post = {
        name: this.name,
        time: time,
        title: this.title,
        post: this.post,
        comments: [],
        pv: 0
    };

    //打开数据库
    mongodb.open(function (err, db) {
        if(err){
            return callback(err);
        }
        //读取post集合
       db.collection('posts',function (err, collection) {
           if(err){
               mongodb.close();
               return callback(err);
           }
           //将文档插入 posts 集合
           collection.insert(post,{
               safe: true
           },function (err) {
               mongodb.close();
               if(err) {
                   return callback(err);//失败！返回err
               }
               callback(null);//返回err为null
           });
       });
    });
};

//读取所有文章及其相关信息
Post.getAll = function (name, callback) {
    //打开数据库
    mongodb.open(function (err, db) {
        if(err){
            return callback(err);
        }
        //读取post集合
        db.collection('posts',function(err, collection){
            if(err){
                mongodb.close();
                return callback(err);
            }
            var query = {};
            if (name){
                query.name = name;
            }
            //根据query对象查询文章
            collection.find(query).sort({
                time: -1
            }).toArray(function(err, docs){
                mongodb.close();
                if(err){
                    return callback(err);//失败，返回err
                }
                //解析markdown为html
                /*docs.forEach(function (doc){
                   doc.post = markdown.toHTML(doc.post);
                });*/
                callback(null,docs);//成功！以数组形式返回查询结果
            });
        });
    });
};
//读取一篇文章
Post.getOne = function (id, callback) {
    //对ID格式进行处理
    var lookid = new ObjectID(id);
    //console.log(lookid);
    //打开数据库
    mongodb.open(function (err, db) {
        if(err){
            return callback(err);
        }
        //读取post集合
        db.collection('posts',function(err, collection){
            if(err){
                mongodb.close();
                return callback(err);
            }
            //根据用户名，发表日期及文章名进行查询
            collection.findOne({
                "_id": lookid
                //"name": name,
                //"time.day": day,
                //"title": title
            },function (err, doc) {
                //mongodb.close();
                if(err){
                    return callback(err);
                }
                if(doc) {
                    //每一次访问，pv+1
                    collection.update({
                        "_id": lookid
                        //"name": name,
                        //"time.day": day,
                        //"title": title
                    },{
                        $inc:{"pv":1}
                    },function (err) {
                        mongodb.close();
                        if(err){
                            return callback(err);
                        }
                    });
                    //解析markdown为html
                    //doc.post = markdown.toHTML(doc.post);
                    /*if (!doc) {
                     } else {
                     doc.post = markdown.toHTML(doc.post);
                     if(doc.comments){
                     doc.comments.forEach(function (comment) {
                     comment.content = markdown.toHTML(comment.content);
                     });
                     }
                     }*/
                    callback(null, doc);//返回查询的某一篇文章
                }
            });
        });
    });
};

//编辑文章
Post.edit = function (id,callback) {
    //对ID格式进行处理
    var lookid = new ObjectID(id);
    console.log(lookid);
    //打开数据库
    mongodb.open(function (err, db) {
        if(err){
            return callback(err);
        }
        //读取post集合
        db.collection('posts',function (err, collection) {
            if(err){
                mongodb.close();
                return callback(err);
            }
            //根据用户名，发表日期及文章名进行查询
            collection.findOne({
                "_id": lookid
                //'name': name,
                //"time.day": day,
                //"title": title
            },function (err,doc) {
                mongodb.close();
                if(err){
                    return callback(err);
                }
                callback(null, doc);//返回查询的一篇文章
            });
        });
    });
};
//更新文章
Post.update = function (id,post,callback) {
    //对ID格式进行处理
    var lookid = new ObjectID(id);
    //打开数据库
    mongodb.open(function (err, db) {
        if (err) {
            return callback(err);
        }
        //读取post集合
        db.collection('posts', function (err, collection) {
            if (err) {
                mongodb.close();
                return callback(err);
            }
            //更新文章内容
            collection.update({
                "_id": lookid
                //"name": name,
                //"time.day": day,
                //"title": title
            }, {
                $set: {post: post}
            }, function (err) {
                mongodb.close();
                if (err) {
                    return callback(err);
                }
                callback(null);
            });
        });
    });
};

Post.remove = function (id,callback) {
    //对ID格式进行处理
    var lookid = new ObjectID(id);
    //打开数据库
    mongodb.open(function (err,db) {
        if(err){
            return callback(err);
        }
        //读取post集合
        db.collection('posts',function(err,collection){
            if(err){
                mongodb.close();
                return callback(err);
            }
            //根据用户名 日期 和标题查找并删除一篇文章
            collection.remove({
                "_id": lookid
                //"name":name,
                //"time.day":day,
                //"title": title,
            },{
                w:1
            },function (err) {
                mongodb.close();
                if(err){
                    return callback(err);
                }
                callback(null);
            });
        });
    });
};
